 package com.pansky.integration.common.utils;
 
 import com.google.common.collect.Lists;
 import java.io.UnsupportedEncodingException;
 import java.text.DecimalFormat;
 import java.util.List;
 import java.util.Locale;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import javax.servlet.http.HttpServletRequest;
 import org.apache.commons.lang3.StringEscapeUtils;
 import org.springframework.context.ApplicationContext;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 import org.springframework.web.servlet.LocaleResolver;
 
 public class StringUtils extends org.apache.commons.lang3.StringUtils
 {
   private static final char SEPARATOR = '_';
   private static final String CHARSET_NAME = "UTF-8";
 
   public static byte[] getBytes(String str)
   {
     if (str != null) {
       try {
         return str.getBytes("UTF-8");
       } catch (UnsupportedEncodingException e) {
         return null;
       }
     }
     return null;
   }
 
   public static String toString(byte[] bytes)
   {
     try
     {
       return new String(bytes, "UTF-8"); } catch (UnsupportedEncodingException e) {
     }
     return "";
   }
 
   public static boolean inString(String str, String[] strs)
   {
     if (str != null) {
       for (String s : strs) {
         if (str.equals(trim(s))) {
           return true;
         }
       }
     }
     return false;
   }
 
   public static String replaceHtml(String html)
   {
     if (isBlank(html)) {
       return "";
     }
     String regEx = "<.+?>";
     Pattern p = Pattern.compile(regEx);
     Matcher m = p.matcher(html);
     String s = m.replaceAll("");
     return s;
   }
 
   public static String replaceMobileHtml(String html)
   {
     if (html == null) {
       return "";
     }
     return html.replaceAll("<([a-z]+?)\\s+?.*?>", "<$1>");
   }
 
   public static String toHtml(String txt)
   {
     if (txt == null) {
       return "";
     }
     return replace(replace(Encodes.escapeHtml(txt), "\n", "<br/>"), "\t", "&nbsp; &nbsp; ");
   }
 
   public static String abbr(String str, int length)
   {
     if (str == null)
       return "";
     try
     {
       StringBuilder sb = new StringBuilder();
       int currentLength = 0;
       for (char c : replaceHtml(StringEscapeUtils.unescapeHtml4(str)).toCharArray()) {
         currentLength += String.valueOf(c).getBytes("GBK").length;
         if (currentLength <= length - 3) {
           sb.append(c);
         } else {
           sb.append("...");
           break;
         }
       }
       return sb.toString();
     } catch (UnsupportedEncodingException e) {
       e.printStackTrace();
     }
     return "";
   }
 
   public static String abbr2(String param, int length) {
     if (param == null) {
       return "";
     }
     StringBuffer result = new StringBuffer();
     int n = 0;
 
     boolean isCode = false;
     boolean isHTML = false;
     for (int i = 0; i < param.length(); i++) {
       char temp = param.charAt(i);
       if (temp == '<') {
         isCode = true;
       } else if (temp == '&') {
         isHTML = true;
       } else if ((temp == '>') && (isCode)) {
         n -= 1;
         isCode = false;
       } else if ((temp == ';') && (isHTML)) {
         isHTML = false;
       }
       try {
         if ((!isCode) && (!isHTML))
           n += String.valueOf(temp).getBytes("GBK").length;
       }
       catch (UnsupportedEncodingException e) {
         e.printStackTrace();
       }
 
       if (n <= length - 3) {
         result.append(temp);
       } else {
         result.append("...");
         break;
       }
     }
 
     String temp_result = result.toString().replaceAll("(>)[^<>]*(<?)", "$1$2");
 
     temp_result = temp_result.replaceAll("</?(AREA|BASE|BASEFONT|BODY|BR|COL|COLGROUP|DD|DT|FRAME|HEAD|HR|HTML|IMG|INPUT|ISINDEX|LI|LINK|META|OPTION|P|PARAM|TBODY|TD|TFOOT|TH|THEAD|TR|area|base|basefont|body|br|col|colgroup|dd|dt|frame|head|hr|html|img|input|isindex|li|link|meta|option|p|param|tbody|td|tfoot|th|thead|tr)[^<>]*/?>", "");
 
     temp_result = temp_result.replaceAll("<([a-zA-Z]+)[^<>]*>(.*?)</\\1>", "$2");
 
     Pattern p = Pattern.compile("<([a-zA-Z]+)[^<>]*>");
     Matcher m = p.matcher(temp_result);
     List endHTML = Lists.newArrayList();
     while (m.find()) {
       endHTML.add(m.group(1));
     }
 
     for (int i = endHTML.size() - 1; i >= 0; i--) {
       result.append("</");
       result.append((String)endHTML.get(i));
       result.append(">");
     }
     return result.toString();
   }
 
   public static Double toDouble(Object val)
   {
     if (val == null)
       return Double.valueOf(0.0D);
     try
     {
       return Double.valueOf(trim(val.toString())); } catch (Exception e) {
     }
     return Double.valueOf(0.0D);
   }
 
   public static Float toFloat(Object val)
   {
     return Float.valueOf(toDouble(val).floatValue());
   }
 
   public static Long toLong(Object val)
   {
     return Long.valueOf(toDouble(val).longValue());
   }
 
   public static Integer toInteger(Object val)
   {
     return Integer.valueOf(toLong(val).intValue());
   }
 
   public static String getMessage(String code, Object[] args)
   {
     LocaleResolver localLocaleResolver = (LocaleResolver)SpringContextHolder.getBean(LocaleResolver.class);
     HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
     Locale localLocale = localLocaleResolver.resolveLocale(request);
     return SpringContextHolder.getApplicationContext().getMessage(code, args, localLocale);
   }
 
   public static String getRemoteAddr(HttpServletRequest request)
   {
     String remoteAddr = request.getHeader("X-Real-IP");
     if (isNotBlank(remoteAddr))
       remoteAddr = request.getHeader("X-Forwarded-For");
     else if (isNotBlank(remoteAddr))
       remoteAddr = request.getHeader("Proxy-Client-IP");
     else if (isNotBlank(remoteAddr)) {
       remoteAddr = request.getHeader("WL-Proxy-Client-IP");
     }
     return remoteAddr != null ? remoteAddr : request.getRemoteAddr();
   }
 
   public static String toCamelCase(String s)
   {
     if (s == null) {
       return null;
     }
 
     s = s.toLowerCase();
 
     StringBuilder sb = new StringBuilder(s.length());
     boolean upperCase = false;
     for (int i = 0; i < s.length(); i++) {
       char c = s.charAt(i);
 
       if (c == '_') {
         upperCase = true;
       } else if (upperCase) {
         sb.append(Character.toUpperCase(c));
         upperCase = false;
       } else {
         sb.append(c);
       }
     }
 
     return sb.toString();
   }
 
   public static String toCapitalizeCamelCase(String s)
   {
     if (s == null) {
       return null;
     }
     s = toCamelCase(s);
     return new StringBuilder().append(s.substring(0, 1).toUpperCase()).append(s.substring(1)).toString();
   }
 
   public static String toUnderScoreCase(String s)
   {
     if (s == null) {
       return null;
     }
 
     StringBuilder sb = new StringBuilder();
     boolean upperCase = false;
     for (int i = 0; i < s.length(); i++) {
       char c = s.charAt(i);
 
       boolean nextUpperCase = true;
 
       if (i < s.length() - 1) {
         nextUpperCase = Character.isUpperCase(s.charAt(i + 1));
       }
 
       if ((i > 0) && (Character.isUpperCase(c))) {
         if ((!upperCase) || (!nextUpperCase)) {
           sb.append('_');
         }
         upperCase = true;
       } else {
         upperCase = false;
       }
 
       sb.append(Character.toLowerCase(c));
     }
 
     return sb.toString();
   }
 
   public static void setValueIfNotBlank(String target, String source)
   {
     if (isNotBlank(source))
       target = source;
   }
 
   public static String jsGetVal(String objectString)
   {
     StringBuilder result = new StringBuilder();
     StringBuilder val = new StringBuilder();
     String[] vals = split(objectString, ".");
     for (int i = 0; i < vals.length; i++) {
       val.append(new StringBuilder().append(".").append(vals[i]).toString());
       result.append(new StringBuilder().append("!").append(val.substring(1)).append("?'':").toString());
     }
     result.append(val.substring(1));
     return result.toString();
   }
   public static String formatPhoneNum(String phoneNum) {
     if ((phoneNum == null) || (phoneNum.length() == 0)) {
       return "";
     }
     if (phoneNum.length() == 11) {
       return new StringBuilder().append(phoneNum.substring(0, 3)).append("-").append(phoneNum.substring(3, 7)).append("-").append(phoneNum.substring(7, 11)).toString();
     }
     return "";
   }
 
   public static String formatJe(String je) {
     if ((je == null) || (je.length() == 0)) {
       return "0.0";
     }
     double jed = 0.0D;
     try {
       jed = Double.valueOf(je).doubleValue();
     } catch (NumberFormatException e) {
       return je;
     }
 
     DecimalFormat myformat = new DecimalFormat();
     myformat.applyPattern("##,###.00");
     String jes = myformat.format(jed);
     if (jes.equals(".00")) {
       return "0";
     }
     if (jes.startsWith(".")) {
       return new StringBuilder().append("0").append(jes).toString();
     }
     return jes;
   }
   public static String formatJeToInt(String je) {
     if ((je == null) || (je.length() == 0)) {
       return "0";
     }
     double jed = 0.0D;
     try {
       jed = Double.valueOf(je).doubleValue();
     } catch (NumberFormatException e) {
       return je;
     }
     DecimalFormat myformat = new DecimalFormat();
     myformat.applyPattern("##,###");
     String jes = myformat.format(jed);
     return jes;
   }
 }




